package com.eastfair.auth.dto;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.eastfair.annotation.annotation.vo.VoInfo;
import com.eastfair.annotation.base.SubjectTypeEnum;
import com.eastfair.auth.enumeration.UserAccountStatusEnum;
import com.eastfair.demand.auth.UserAccountVoGroupClass;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 用户账户信息
 * </p>
 *
 * @author ligang
 * @since 2021-07-27
 */
@Data
@ApiModel(value = "UserAccountDto", description = "用户信息Dto")
public class UserAccountDto implements Serializable {
    //校验标识
    public interface getByIds {
    }

    ;

    public interface updateById {
    }

    ;

    public interface getTokenOfMini {
    }

    private static final long serialVersionUID = 1L;

    /**
     * 用户id
     */
    @NotNull(groups = {getByIds.class})
    private List<Long> userIds;

    /**
     * 主键id
     */
    @ApiModelProperty(value = "主键id")
    @NotNull(groups = {updateById.class})
    private Long id;

    /**
     * 用户名
     */
    @ApiModelProperty(value = "用户名")
//    @NotBlank(groups = {updateById.class})
    private String name;


    /**
     * 手机国家区号
     */
    @ApiModelProperty(value = "手机国家区号")
    private String countryCode;

    /**
     * 手机号
     */
    @ApiModelProperty(value = "手机号")
//    @NotBlank(groups = {updateById.class})
    private String mobile;

    /**
     * 邮箱
     */
    @ApiModelProperty(value = "邮箱")
//    @NotBlank(groups = {updateById.class})
    private String email;

    /**
     * 密码
     */
    @ApiModelProperty(value = "密码")
    private String password;


    /**
     * IM密码
     */
    @ApiModelProperty(value = "IM密码")
    private String imPassword;

    /**
     * 状态
     * #{NORMAL:正常;WAIT_INIT:待初始化;FORBIDDEN:禁用;WAITING:待审核;REFUSE:拒绝;DELETE:已删除}
     */
    @ApiModelProperty(value = "状态")
    private UserAccountStatusEnum status;

    /**
     * IP地址
     */
    @ApiModelProperty(value = "IP地址")
    private String ipAddr;

    /**
     * 是否是游客 1是 0否
     */
    @ApiModelProperty(value = "是否是游客 1是 0否")
    private Integer isTourist;

    /**
     * 是否是观众 1是 0否
     */
    @ApiModelProperty(value = "是否是观众 1是 0否")
    @TableField(value = "is_visitor")
    @Excel(name = "是否是观众 1是 0否")
    private Integer isVisitor;

    /**
     * 是否是主办 1是 0否
     */
    @ApiModelProperty(value = "是否是主办 1是 0否")
    @TableField(value = "is_sponsor")
    @Excel(name = "是否是主办 1是 0否")
    private Integer isSponsor;

    /**
     * 是否是展商 1是 0否
     */
    @ApiModelProperty(value = "是否是展商 1是 0否")
    @TableField(value = "is_employee")
    @Excel(name = "是否是员工 1是 0否")
    private Integer isEmployee;

    /**
     * 是否完成完善信息：1是；0否
     */
    @ApiModelProperty(value = "是否完成完善信息：1是；0否")
    private Integer isCompleteInfo;

    /**
     * 是否完成问卷：1是；0否
     */
    @ApiModelProperty(value = "是否完成问卷：1是；0否")
    private Integer isCompleteQuestion;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    private Long tenantId;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @NotNull(groups = {getTokenOfMini.class}, message = "请填写项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    private Long subsystemId;

    /**
     * 是否生效(默认1：可用 0:不可用)
     */
    @ApiModelProperty(value = "是否生效(默认1：可用 0:不可用)")
    private Integer enabled;

    /**
     * 是否删除(默认0：未删除 1:已删除)
     */
    @ApiModelProperty(value = "是否删除(默认0：未删除 1:已删除)")
    private Integer deleted;

    /**
     * 验证码id
     */
    @ApiModelProperty(value = "验证码id")
    private String verifyId;

    /**
     * 验证码
     */
    @ApiModelProperty(value = "验证码")
    private String verifyValue;

    /**
     * 公司id
     */
    @ApiModelProperty(value = "公司id")
    @TableField(value = "company_id")
    @Excel(name = "公司id")
    private Long companyId;

    /**
     * 展商id
     */
    @ApiModelProperty(value = "展商id")
    @TableField(value = "exhibitor_id")
    @Excel(name = "展商id")
    private Long exhibitorId;

    /**
     * 观众id
     */
    @ApiModelProperty(value = "观众id")
    @TableField(value = "visitor_id")
    @Excel(name = "观众id")
    private Long visitorId;


    /**
     * 是否是展商 1是 0否
     */
    @ApiModelProperty(value = "是否是展商 1是 0否")
    @TableField(value = "is_actor")
    @Excel(name = "是否是展商 1是 0否")
    private Integer isActor;
    /**
     * 头像
     */
    @ApiModelProperty(value = "头像")
    @Size(max = 255, message = "头像长度不能超过255")
    @TableField(value = "head_img", condition = LIKE)
    @Excel(name = "头像")
    private String headImg;

    /**
     * 昵称
     */
    @ApiModelProperty(value = "昵称")
    @Size(max = 255, message = "昵称长度不能超过255")
    @TableField(value = "nick_name", condition = LIKE)
    @Excel(name = "昵称")
    private String nickName;

    /**
     * 用户类型枚举类
     */
    private SubjectTypeEnum subjectType;

    /**
     * 组织id集合
     */
    @ApiModelProperty(value = "组织id集合")
    private List<Long> orgIds;

    /**
     * 角色id集合
     */
    @ApiModelProperty(value = "角色id集合")
    private List<Long> roleIds;

    /**
     * 是否启用 1是 0否
     */
    @ApiModelProperty(value = "是否启用 1是 0否")
    private Integer isEnabled;
    /**
     * 是否删除 1是 0否
     */
    @ApiModelProperty(value = "是否删除 1是 0否")
    private Integer isDeleted;

    /**
     * 身份证号
     */
    @ApiModelProperty(value = "身份证号")
    @Size(max = 255, message = "身份证号长度不能超过255")
    private String idCard;
    /**
     * 真实姓名
     */
    @ApiModelProperty(value = "真实姓名")
    @Size(max = 255, message = "真实姓名长度不能超过255")
    private String realName;


    /**
     * 配套商ID
     */
    @ApiModelProperty(value = "配套商ID")
    private Long matingId;

    /**
     * 主运ID
     */
    @ApiModelProperty(value = "主运ID")
    private Long transportId;

    /**
     * 搭建商ID
     */
    @ApiModelProperty(value = "搭建商ID")
    private Long producerId;
    /**
     * 是否管理员 1是0否
     */
    @ApiModelProperty(value = "是否管理员 1是0否")
    private Integer isAdmin;


    /**
     * 是否超级管理员1是0否
     */
    @ApiModelProperty(value = "是否超级管理员1是0否")
    private Integer isSuperAdmin;


    /**
     * 主场ID
     */
    @ApiModelProperty(value = "主场ID")
    private Long courtId;


    /**
     * 是否查全部
     */
    @ApiModelProperty(value = "查全部")
    private Boolean isFindAll;

    /**
     * iam登录用的code
     */
    @ApiModelProperty(value = "iam登录用的code")
    private String code;


    /**
     * 华为IAM用户id
     */
    @ApiModelProperty(value = "华为IAM用户id")
    private String iamUserId;

    /**
     * 系统标识
     */
    @ApiModelProperty(value = "系统标识")
    private String systemScene;


    /**
     * 是否主账号
     */
    @ApiModelProperty(value = "是否主账号")
    private Integer isPrimaryAccount;


    /**
     * 服务商类型 服务商类型 #{BUILD_SERVICE_PROVIDER:搭建服务商;MAIN_TRANSPORT_SERVICE_PROVIDER:主运服务商;HOME_SERVICE_PROVIDER:主场服务商;MATCHING_SERVICE_PROVIDER:配套服务商}
     */
    @ApiModelProperty(value = "服务商类型")
//    @NotBlank(groups = {getTokenOfMini.class}, message = "请填写服务商类型")
    private String serviceProviderType;

    @ApiModelProperty(value = "服务商Id")
//    @NotNull(groups = {getTokenOfMini.class}, message = "请填写服务商Id")
    private Long serviceProviderId;


    /**
     * 性別FEMALE女  MALE男 UNKNOW未知
     */
    @ApiModelProperty(value = "性別 1男 0女")
    private String gender;


    /**
     * 是否是负责人
     */
    @ApiModelProperty(value = "是否是负责人")
    private Integer isLeader;

    /**
     * 公钥
     */
    @ApiModelProperty(value = "公钥")
    private String publicKey;





    /**
     * 是否厦门智慧场馆1是 0否
     */
    @ApiModelProperty(value = "是否厦门智慧场馆1是 0否")
    @TableField(value = "is_p")
    @Excel(name = "是否厦门智慧场馆1是 0否")
    private Integer isP;

    /**
     * 是否场馆业务管理系统1是 0否
     */
    @ApiModelProperty(value = "是否场馆业务管理系统1是 0否")
    @TableField(value = "is_p_venue")
    @Excel(name = "是否场馆业务管理系统1是 0否")
    private Integer isPVenue;

    /**
     * 是否证件管理系统1是 0否
     */
    @ApiModelProperty(value = "是否证件管理系统1是 0否")
    @TableField(value = "is_p_certificate")
    @Excel(name = "是否证件管理系统1是 0否")
    private Integer isPCertificate;

    /**
     * 是否综合-场馆管理1是 0否
     */
    @ApiModelProperty(value = "是否综合-场馆管理1是 0否")
    @TableField(value = "is_p_composite_venue")
    @Excel(name = "是否综合-场馆管理1是 0否")
    private Integer isPCompositeVenue;

    /**
     * 是否综合-主场管理1是 0否
     */
    @ApiModelProperty(value = "是否综合-主场管理1是 0否")
    @TableField(value = "is_p_composite_court")
    @Excel(name = "是否综合-主场管理1是 0否")
    private Integer isPCompositeCourt;

    /**
     * 是否综合-搭建商管理1是 0否
     */
    @ApiModelProperty(value = "是否综合-搭建商管理1是 0否")
    @TableField(value = "is_p_composite_producer")
    @Excel(name = "是否综合-搭建商管理1是 0否")
    private Integer isPCompositeProducer;

    /**
     * 是否综合-主运管理1是 0否
     */
    @ApiModelProperty(value = "是否综合-主运管理1是 0否")
    @TableField(value = "is_p_composite_transport")
    @Excel(name = "是否综合-主运管理1是 0否")
    private Integer isPCompositeTransport;

    /**
     * 是否综合-商旅管理1是 0否
     */
    @ApiModelProperty(value = "是否综合-商旅管理1是 0否")
    @TableField(value = "is_p_composite_trade")
    @Excel(name = "是否综合-商旅管理1是 0否")
    private Integer isPCompositeTrade;

    /**
     * 是否综合-配套商管理1是 0否
     */
    @ApiModelProperty(value = "是否综合-配套商管理1是 0否")
    @TableField(value = "is_p_composite_mating")
    @Excel(name = "是否综合-配套商管理1是 0否")
    private Integer isPCompositeMating;

    /**
     * 是否支付系统1是 0否
     */
    @ApiModelProperty(value = "是否支付系统1是 0否")
    @TableField(value = "is_p_pay")
    @Excel(name = "是否支付系统1是 0否")
    private Integer isPPay;

    /**
     * 是否展商自服务1是 0否
     */
    @ApiModelProperty(value = "是否展商自服务1是 0否")
    @TableField(value = "is_p_exhibitor_self")
    @Excel(name = "是否展商自服务1是 0否")
    private Integer isPExhibitorSelf;

    /**
     * 是否餐饮小程序1是 0否
     */
    @ApiModelProperty(value = "是否餐饮小程序1是 0否")
    @TableField(value = "is_p_cateringapp")
    @Excel(name = "是否餐饮小程序1是 0否")
    private Integer isPCateringapp;

    /**
     * 是否餐饮后台服务1是 0否
     */
    @ApiModelProperty(value = "是否餐饮后台服务1是 0否")
    @TableField(value = "is_p_catering")
    @Excel(name = "是否餐饮后台服务1是 0否")
    private Integer isPCatering;

    /**
     * 是否对外门户-场馆后台1是 0否
     */
    @ApiModelProperty(value = "是否对外门户-场馆后台1是 0否")
    @TableField(value = "is_p_portal_out_venue")
    @Excel(name = "是否对外门户-场馆后台1是 0否")
    private Integer isPPortalOutVenue;

    /**
     * 是否对外门户-运营后台1是 0否
     */
    @ApiModelProperty(value = "是否对外门户-运营后台1是 0否")
    @TableField(value = "is_p_portal_out_operation")
    @Excel(name = "是否对外门户-运营后台1是 0否")
    private Integer isPPortalOutOperation;

    /**
     * 是否内部门户-工作后台1是 0否
     */
    @ApiModelProperty(value = "是否内部门户-工作后台1是 0否")
    @TableField(value = "is_p_portal_in_work")
    @Excel(name = "是否内部门户-工作后台1是 0否")
    private Integer isPPortalInWork;

    /**
     * 是否内部门户-工作app1是 0否
     */
    @ApiModelProperty(value = "是否内部门户-工作app1是 0否")
    @TableField(value = "is_p_portal_in_workapp")
    @Excel(name = "是否内部门户-工作app1是 0否")
    private Integer isPPortalInWorkapp;

    /**
     * 是否智慧运营中心系统1是 0否
     */
    @ApiModelProperty(value = "是否智慧运营中心系统1是 0否")
    @TableField(value = "is_p_operation_center")
    @Excel(name = "是否智慧运营中心系统1是 0否")
    private Integer isPOperationCenter;

    /**
     * 是否访客前台系统1是 0否
     */
    @ApiModelProperty(value = "是否访客前台系统1是 0否")
    @TableField(value = "is_p_visitor_front")
    @Excel(name = "是否访客前台系统1是 0否")
    private Integer isPVisitorFront;

    /**
     * 是否访客后台系统1是 0否
     */
    @ApiModelProperty(value = "是否访客后台系统1是 0否")
    @TableField(value = "is_p_visitor_back")
    @Excel(name = "是否访客后台系统1是 0否")
    private Integer isPVisitorBack;
}
